2oneweek.dev

12. Global Object & Global Scope

    Tags

  • JavaScript
12. Global Object & Global Scope thumbnail

Global Object와 Global Scope

Global Object

var value = 100; function book() { var point = 200; return value; } book();

value 변수를 살펴보자

함수 안에 변수를 선언하면, 변수가 함수에 속하게 되지만, value 변수는 함수 안에 작성하지 않았다. value 변수가 속하는 오브젝트가 없는데, 이때 글로벌 오브젝트에 속하게 된다.

  • 이런 매커니즘 구현이 가능한 이유는 글로벌 오브젝트는 오직 하나만 있기 때문이다.


Global Object의 특징

  1. JS 소스파일 전체에서 Global Object는 하나만 존재한다.

    • 따라서, new 연산자로 Global Object의 Instance 생성은 불가능하다. 인스턴스 생성이 가능하다면, 하나만 존재한다는 전제가 깨진다.
  2. JS 소스파일 "전체"의 범위는 <script>태그 안에 작성된 모든 코드를 말한다.

    • 파일명이 달라도, 모두 하나의 글로벌 오브젝트에 속하게 된다.
    //<script src="./aaa.js" > var value = 100; function book() { return value + 50; }

    valuebook함수는 어느 Scope에 저장되는데, 그것이 바로 Global Object다.

    //<script src="./bbb.js" > console.log(value); //=> 100 console.log(book()); //=> 150

    Global Object는 단 하나만 존재하는 Scope다. 따라서, 다른 다른 파일인데도 불구하고 식별자 해결이 정상적으로 동작하게 된다.

    • Scope에서 value와 book함수의 식별자 해결을 하고 값을 가져올 수 있다. 오브젝트가 없는 변수와 함수는 Global Object에 저장된다.
  • Global Object 자체가 Scope다.



Global Scope

  • Global Object 자체가 Scope다.
  • Global Object는 단 하나다, 따라서 Global Scope도 오직 한 개만 존재한다.

[Object] 개발자는 오브젝트에 함수와 변수를 작성한다.

  • Global Object라는 Object가 따로 존재하는 것이 아니다. 그러나 우리는 Javascript에선 함수와 변수를 작성하려면 Object에 작성됨을 알고 있다. 따라서, Host Object의 개념을 이용해서 Window Object를 Global Object로 사용한다. 즉, Global Object는 분류를 위한 개념이지 실재하는 Object는 아니다.
  • Global Object에 설정되어야 하는 변수나 함수들은 따라서, 실재하는 Global Object에 설정되는 것이 아니라, Host Object개념으로 Window Object에 설정된다.

[Scope] Scope는 엔진관점으로 식별자 해결을 위한 것이다.

  • 엔진은 한 함수에서 변수를 찾기위해 Scope를 뒤진다.
  • 만약 현재 스코프에서 식별자 해결이 이뤄지지 않으면 상위 Scope에서 식별자 해결을 시도한다.
  • 가장 마지막에 도달하는 Scope가 Global Scope다.

즉, Global Scope와 Global Object는 같은 것이지만, 엔진은 Scope적으로 바라보고, 개발자는 Object적으로 바라보게 된다는 것이다. 같은 것이지만, 관점과 목적이 다르다.



Global Object의 관점에서 Global

var value = 100; function book() { return value; } book();
  1. 엔진은 우선 선언문을 찾는다.
  2. function 키워드를 만나 book이라는 function Object를 생성한다.
  3. 여기서, book 함수가 속한 object가 없으므로 Global Object에 설정한다.
    • 이렇게 Global Object에 설정된 함수를 글로벌 함수라고 한다.
  4. 이제 표현식을 처리한다. value변수가 글로벌 오브젝트에 설정된다.
    • 글로벌 오브젝트에 설정된 변수를 글로벌 변수라고 한다.
  • 이렇게 글로벌 오브젝트에 설정된다는 것은 오브젝트의 관점이다.

Scope 관점에서 Global

var value = 100; function book() { return value; } book();
  1. book()함수 호출하려면, 오브젝트.book() 형태로 작성해야하는데, 함수만 작성되어 있다.
  2. 위처럼 오브젝트를 작성하지 않으면, 글로벌 오브젝트를 해당 오브젝트로 간주하여, 글로벌 오브젝트의 book함수를 호출하게 된다.
    • 즉 Global Object에서 book함수를 찾아 호출한다.
  3. 사실 호출을 하려면, 식별자 해결을 해야되는데, 현재 글로벌 스코프에서 식별자 해결을 진행하고 호출하게 된다.
    • Global Scope(Object)는 실체가 없다. Host Object 개념으로 Window Scope(Object)에서 book이라는 이름으로 식별자 해결을 한다.
  • 엔진의 식별자 해결 관점에선 글로벌 스코프로 보고, 개발자 관점에선 글로벌 오브젝트라고 본다.
Written by@2-one-week
현재 블로그 개발 중

GitHubLinkedIn